home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 2 / Gekikoh Dennoh Club Vol. 2 (Japan).7z / Gekikoh Dennoh Club Vol. 2 (Japan) (Track 01).bin / fsw / zm302 / zm302_s.lzh / MACRO.S < prev    next >
Text File  |  1997-03-15  |  11KB  |  419 lines

  1.     .nlist
  2.     .include    version.mac
  3.  
  4. Z_MUSIC    macro    number
  5.     moveq.l    number,d0
  6.     trap    #3
  7.     endm
  8.  
  9. MPCM_call    macro    number
  10. *local    mmmm
  11. *    cmpi.b    #$0f,d0
  12. *    bls    mmmm
  13. *    cmpi.b    #-1,d0
  14. *    beq    mmmm
  15. *    jsr    debug2
  16. *mmmm:
  17.     trap    #1
  18.     endm
  19.  
  20. bitsns    macro    n        *IOCS    _BITSNSと同等に機能する
  21.     move.b    $800+n.w,d0
  22.     endm
  23.  
  24. opmwait    macro
  25.     jbsr    opmwait
  26.     endm
  27.  
  28. midiwait    macro            *24MHzに改造したXVIへ対応/X68030へ対応させる時
  29.     jbsr    midiwait
  30.     endm
  31.  
  32.  
  33. opmset    macro    reg,data    *FM音源のレジスタ書き込み
  34.     opmwait
  35.     move.b    reg,fm_addr_port
  36.     opmwait
  37.     move.b    data,fm_data_port
  38.     endm
  39.  
  40. opmset0    macro    reg,data    *FM音源のレジスタ書き込み
  41.     opmwait
  42.     move.b    reg,fm_addr_port
  43.     opmwait
  44.     clr.b    fm_data_port
  45.     endm
  46.  
  47. calc_wk    macro    reg
  48.     swap    reg
  49.     lsr.l    #16-trwk_size_,reg
  50.     movea.l    seq_wk_tbl-work(a6),a5
  51.     adda.l    reg,a5        *a5=trk n seq_wk_tbl
  52.     endm
  53.  
  54. err    macro    ern    *,beep
  55. *    .if    (beep=1)
  56. *    bsr    play_beep
  57. *    .endif
  58.     move.l    fnc_no(pc),d0    *わざと.l
  59.     move.w    #ern,d0
  60.     bra    t_error_code_exit
  61.     endm
  62.  
  63. tempo_range    macro    tempo,type
  64.     local    t1
  65.     local    t2
  66.     cmp.w    t_min&type-work(a6),tempo
  67.     bcc    t1
  68.     move.w    t_min&type-work(a6),tempo
  69.     bra    t2
  70. t1:
  71.     cmp.w    t_max&type-work(a6),tempo
  72.     bls    t2
  73.     move.w    t_max&type-work(a6),tempo
  74. t2:
  75.     endm
  76.  
  77. init_pmod_wk    macro    dstnc,dreg,areg
  78.     *一度に複数を初期化(p_pmod_dpndpt,p_pmod_dpt_tbl)
  79.     move.l    dreg,p_pmod_dpndpt+dstnc(areg)
  80.  
  81.     *一度に複数を初期化(p_pmod_dpnspd,p_pmod_spd_tbl)
  82.     move.l    #mod_dflt,p_pmod_dpnspd+dstnc(areg)
  83.     move.l    dreg,p_pmod_spd_tbl+02+dstnc(areg)    *!
  84.     move.l    dreg,p_pmod_spd_tbl+06+dstnc(areg)    *!
  85.     move.l    dreg,p_pmod_spd_tbl+10+dstnc(areg)    *!
  86.     move.l    dreg,p_pmod_spd_tbl+14+dstnc(areg)    *!p_pmod_dpt_now.w=0
  87.  
  88.     *一度に複数を初期化(p_pmod_wf,p_pmod_1st_dly)
  89.     move.l    #$0002_0000,p_pmod_wf+dstnc(areg)
  90.     move.l    dreg,p_pmod_8st_tbl+00+dstnc(areg)    *!
  91.     move.l    dreg,p_pmod_8st_tbl+04+dstnc(areg)    *!
  92.     move.l    dreg,p_pmod_8st_tbl+08+dstnc(areg)    *!
  93.     move.l    dreg,p_pmod_8st_tbl+12+dstnc(areg)    *!
  94.  
  95.     *一度に複数を初期化(p_pmod_sw,p_pmod_sw2,p_pmod_chain,p_pmod_flg)
  96.     move.l    #$00_00_02_80,p_pmod_sw+dstnc(areg)
  97.  
  98.     *一度に複数を初期化(p_pmod_mode,p_pmod_omt,p_pitch_last)
  99.     move.l    #$ff_01_ffff,p_pmod_mode+dstnc(areg)
  100.  
  101.     move.l    dreg,p_pmod_pitch+dstnc(areg)
  102.  
  103.     *一度に複数を初期化(p_pmod_wf2,p_pmod_dpnrpt)
  104.     move.l    #$0002_0000,p_pmod_wf2+dstnc(areg)
  105.  
  106.     *一度に複数を初期化(p_pmod_syncnt,p_pmod_syncnt2)
  107.     move.l    #$0001_0001,p_pmod_syncnt+dstnc(areg)
  108.     endm
  109.  
  110. init_arcc_wk    macro    arcc_dflt,arcc_sync
  111.     *一度に複数を初期化(p_arcc_wf,p_arcc_dpndpt,p_arcc_dpt_tbl)
  112.     move.l    #$0002_00_00,p_arcc_wf(a4)
  113.  
  114.     *一度に複数を初期化(p_arcc_dpnspd,p_arcc_spd_tbl)
  115.     move.l    #mod_dflt,p_arcc_dpnspd(a4)
  116.     move.l    d0,p_arcc_spd_tbl+02(a4)    *!
  117.     move.l    d0,p_arcc_spd_tbl+06(a4)    *!
  118.     move.l    d0,p_arcc_spd_tbl+10(a4)    *!
  119.     move.l    d0,p_arcc_spd_tbl+14(a4)    *!p_arcc_dpt_now.b=0,p_arcc_flg2.b=0
  120.  
  121.     *一度に複数を初期化(p_arcc_mode,p_arcc_omt,p_arcc_1st_dly)
  122.     move.l    #$ff_01_0000,p_arcc_mode(a4)
  123.     move.l    d0,p_arcc_8st_tbl+00(a4)    *!
  124.     move.l    d0,p_arcc_8st_tbl+04(a4)    *!
  125.     move.l    d0,p_arcc_8st_tbl+08(a4)    *!
  126.     move.l    d0,p_arcc_8st_tbl+12(a4)    *!
  127.  
  128.     *一度に複数を初期化(p_arcc_sw,p_arcc_sw2,p_arcc_chain,p_arcc_flg)
  129.     move.l    #$00_00_02_00+arcc_sync,p_arcc_sw(a4)
  130.  
  131.     *一度に複数を初期化(p_arcc_last,p_arcc_reset,p_arcc_origin,p_arcc)
  132.     move.l    #$ff_7f_7f00+arcc_dflt,p_arcc_last(a4)
  133.  
  134.     *一度に複数を初期化(p_arcc_wf2,p_arcc_dpnrpt)
  135.     move.l    #$0002_0000,p_arcc_wf2(a4)
  136.  
  137.     *一度に複数を初期化(p_arcc_syncnt,p_arcc_syncnt2)
  138.     move.l    #$0001_0001,p_arcc_syncnt(a4)
  139.     endm
  140.  
  141. patch    macro    sor,des,para
  142.     .if    (para=0)
  143.     dc.l    sor-work
  144.     dc.w    des-sor-2,para
  145.     .else
  146.     dc.l    sor-work
  147.     dc.w    0,para
  148.     .endif
  149.     endm
  150.  
  151. patch_l    macro    cmd,src,dest
  152.     .iff    (debug.and.2)
  153.     move.l    #cmd*65536+((dest-src-2).and.$ffff),src-work(a6)
  154.     .else
  155.     dc.w    0
  156.     lea    dest-src-2(pc),a0
  157.     dc.w    0
  158.     .endif
  159.     endm
  160.  
  161. patch_l2    macro    cmd,src,dest
  162.     .iff    (debug.and.2)
  163.     move.l    #cmd*65536+((dest-src-2).and.$ffff),src
  164.     .else
  165.     dc.w    0
  166.     lea    dest-src-2(pc),a0
  167.     dc.w    0
  168.     .endif
  169.     endm
  170.  
  171. patch_w    macro    cmd,src,dest
  172.     .iff    (debug.and.2)
  173.     move.w    #cmd+((dest-src-2).and.$ff),src-work(a6)
  174.     .else
  175.     lea    dest-src-2(pc,d0.w),a0
  176.     dc.b    0,0    *for test
  177.     .endif
  178.     endm
  179.  
  180. patch_w2    macro    cmd,src,dest
  181.     .iff    (debug.and.2)
  182.     move.w    #cmd+((dest-src-2).and.$ff),src
  183.     .else
  184.     lea    dest-src-2(pc,d0.w),a0
  185.     dc.b    0,0    *for test
  186.     .endif
  187.     endm
  188.  
  189. patch_x    macro    src,dest
  190. *    fail    (((dest-work).slt.-32768).or.((dest-work).sgt.32767))
  191.     .iff    (debug.and.2)
  192.     move.l    #$4eae*65536+((dest-work).and.$ffff),src-work(a6)
  193.     .else
  194.     dc.w    0
  195.     lea    dest-work(pc),a0
  196.     dc.w    0
  197.     .endif
  198.     endm
  199.  
  200. patch_x2    macro    src,dest
  201. *    fail    (((dest-work).slt.-32768).or.((dest-work).sgt.32767))
  202.     .iff    (debug.and.2)
  203.     move.l    #$4eae*65536+((dest-work).and.$ffff),src
  204.     .else
  205.     dc.w    0
  206.     lea    dest-work(pc),a0
  207.     dc.w    0
  208.     .endif
  209.     endm
  210.  
  211. t_dat_ok    macro
  212.     moveq.l    #0,d0
  213.     rts
  214.     endm
  215.  
  216. reduce_range    macro    reg,min,max
  217.     * < reg.w=-32768~+32767
  218.     * > reg.w=-128~+127
  219.     local    rav0
  220.     local    rav1
  221.     cmpi.w    #min,reg
  222.     bge    rav0
  223.     move.w    #min,reg
  224.     bra    rav1
  225. rav0:
  226.     cmpi.w    #max,reg
  227.     ble    rav1
  228.     move.w    #max,reg
  229. rav1:
  230.     endm
  231.  
  232. reduce_range_l    macro    reg,min,max
  233.     * < reg.l=-32768~+32767
  234.     * > reg.w=-128~+127
  235.     local    rav0
  236.     local    rav1
  237.     cmpi.l    #min,reg
  238.     bge    rav0
  239.     move.w    #min,reg
  240.     bra    rav1
  241. rav0:
  242.     cmpi.l    #max,reg
  243.     ble    rav1
  244.     move.w    #max,reg
  245. rav1:
  246.     endm
  247.  
  248. chg64_683    macro    reg    *64range -> 683 range
  249.     local    c66_0,c66_1,c66_2
  250.     cmpi.l    #3000,reg
  251.     bgt    c66_0
  252.     cmpi.l    #-3000,reg
  253.     bge    c66_1
  254. c66_0:
  255.     divs    #3,reg
  256.     ext.l    reg
  257.     asl.l    #5,reg
  258.     bra    c66_2
  259. c66_1:
  260.     asl.l    #5,reg
  261.     divs    #3,reg
  262. c66_2:
  263.     endm
  264.  
  265. chg64_683_    macro    reg    *64range -> 683 range
  266.     local    c66_0,c66_1,c66_2
  267.     cmpi.l    #3000,reg
  268.     bgt    c66_0
  269.     cmpi.l    #-3000,reg
  270.     bge    c66_1
  271. c66_0:
  272.     divs    #3,reg
  273.     ext.l    reg
  274.     asl.l    #5,reg
  275.     bra    c66_2
  276. c66_1:
  277.     asl.l    #5,reg
  278.     divs    #3,reg
  279.     ext.l    reg        *ここが上と違う
  280. c66_2:
  281.     endm
  282.  
  283.     *MIDI ボードのアドレス
  284. ivr:    equ    $eafa01
  285. rgr:     equ    $eafa03
  286. isr:     equ    $eafa05
  287. icr:    equ    $eafa07
  288. grp4:     equ    icr+2
  289. grp5:    equ    grp4+2
  290. grp6:     equ    grp5+2
  291. grp7:    equ    grp6+2
  292.  
  293. scc_a:    equ    $e98005
  294.  
  295. zmd_j_tbl    macro    xx
  296. n    set    play_end_&xx
  297.     dc.l    rest_&xx            *$80 休符 R
  298.     dc.l    wait_&xx            *$81 ウェイト @W
  299.     dc.l    track_delay_&xx            *$82 トラックディレイ
  300.     dc.l    mx_key_&xx            *$83 MXDRVコンバート用KEY ON
  301.     dc.l    portament_&xx            *$84 ポルタメント ()
  302.     dc.l    portament2_&xx            *$85 ポルタメント2 []
  303.     dc.l    n,n
  304.     dc.l    n,n,n,n,n,n,n,n
  305.     dc.l    volume_&xx            *$90 VOLUME V/@V(127段階)
  306.     dc.l    rltv_vol_&xx            *$91 相対ボリューム @V
  307.     dc.l    rltv_vol2_&xx            *$92 相対ボリューム @V
  308.     dc.l    velocity_&xx            *$93 ベロシティ @U
  309.     dc.l    rltv_velo_&xx            *$94 相対ベロシティ・アップ/ダウン
  310.     dc.l    pmod_mode_&xx            *$95 PMODモード選択 M
  311.     dc.l    pmod_sw_&xx            *$96 PMODスイッチ @M
  312.     dc.l    pmod_sync_&xx            *$97 モジュレーションホールド H
  313.     dc.l    bend_sw_&xx            *$98 ピッチベンド・スイッチ @B
  314.     dc.l    aftc_sw_&xx            *$99 アフタータッチ・シーケンススイッチ @Z
  315.     dc.l    aftc_sync_&xx            *$9a アフタータッチ・シーケンススイッチ @Z
  316.     dc.l    vseq_sw_&xx            *$9b ベロシティ・シーケンス・スイッチ
  317.     dc.l    agogik_sw_&xx            *$9c アゴーギク・スイッチ
  318.     dc.l    agogik_sync_&xx            *$9d アゴーギク・ホールド
  319.     dc.l    tie_mode_&xx            *$9e タイモード指定(MIDI専用) "
  320.     dc.l    pcm_mode_&xx            *$9f PCM MODE
  321.     dc.l    panpot_&xx            *$a0 パンポット絶対指定 P/@P
  322.     dc.l    rltv_pan_&xx            *$a1 パンポット相対指定 P/@P
  323.     dc.l    slot_mask_&xx            *$a2 OPMマスク切り換え
  324.     dc.l    damper_&xx            *$a3 DUMPER @D
  325.     dc.l    track_mode_&xx            *$a4 non key off mode @R
  326.     dc.l    bend_range_&xx            *$a5 BEND RANGE CHANGE @G
  327.     dc.l    frq_chg_&xx            *$a6 ADPCM FRQ CHANGE @F
  328.     dc.l    n                *$a7
  329.     dc.l    ch_pressure_&xx            *$a8 チャンネル・プレッシャー
  330.     dc.l    rltv_ch_pressure_&xx        *$a9 チャンネル・プレッシャー相対
  331.     dc.l    kill_note_&xx            *$aa 強制キーオフ `
  332.     dc.l    key_transpose_&xx        *$ab キートランスポーズ K
  333.     dc.l    voice_reserve_&xx        *$ac 発音数予約 [VOICE_RESERVE]
  334.     dc.l    vseq_sync_&xx            *$ad ベロシティ・シーケンス同期
  335.     dc.l    n,n                *$ae~$af
  336.     dc.l    pmod_wf_&xx            *$b0 PMOD波形タイプセレクト S
  337.     dc.l    agogik_wf_&xx            *$b1 アゴーギク波形タイプセレクト
  338.     dc.l    len0_note_&xx            *$b2 V2音長0ノート発音
  339.     dc.l    arcc_sw_&xx            *$b3 ARCCスイッチ @A
  340.     dc.l    arcc_mode_&xx            *$b4 ARCCモード選択 M
  341.     dc.l    arcc_sync_&xx            *$b5 モジュレーション・ホールド H
  342.     dc.l    opm_regset_&xx            *$b6 OPMレジスタ書き込み
  343.     dc.l    rltv_opm_regset_&xx        *$b7 相対OPMレジスタ書き込み
  344.     dc.l    detune_@b_&xx            *$b8 デチューン @B
  345.     dc.l    detune_@k_&xx            *$b9 デチューン @K
  346.     dc.l    rltv_@b_&xx            *$ba 相対ディチューン @B
  347.     dc.l    rltv_@k_&xx            *$bb 相対ディチューン @K
  348.     dc.l    reg_set_&xx            *$bc レジスタ書き込み Y
  349.     dc.l    forceplay_&xx            *$bd 強制再演奏 Jn
  350.     dc.l    send_sync_&xx            *$be シンクロ信号送信 Wn
  351.     dc.l    Q_gate_&xx            *$bf Q/@Qコマンド(CONVERTER専用)
  352.     dc.l    polyphonic_pressure_&xx        *$c0 ポリフォニックプレッシャー 絶対&相対
  353.     dc.l    tempo_@t_&xx            *$c1 テンポ @T
  354.     dc.l    rltv_@t_&xx            *$c2 相対テンポ @T±n
  355.     dc.l    tempo_t_&xx            *$c3 テンポ T
  356.     dc.l    rltv_t_&xx            *$c4 相対テンポ T±n
  357.     dc.l    seq_cmd_&xx            *$c5 SEQUENCE CMD []
  358.     dc.l    bank_select_&xx            *$c6 bank select I
  359.     dc.l    timbre_&xx            *$c7 音色切り換え @
  360.     dc.l    timbre2_&xx            *$c8 音色切り換え2 [TIMBRE]
  361.     dc.l    arcc_wf_&xx            *$c9 ARCC波形タイプセレクト S
  362.     dc.l    ID_set_&xx            *$ca ID SET @I
  363.     dc.l    jump_ope3_&xx            *$cb [jump nn]
  364.     dc.l    asgn_chg_&xx            *$cc アサイン変更 @N
  365.     dc.l    repeat_start_&xx        *$cd |:
  366.     dc.l    repeat_end_&xx            *$ce :|
  367.     dc.l    NRPN_&xx            *$cf NRPN set @Y
  368.     dc.l    segno_&xx            *$d0 [segno]
  369.     dc.l    coda_&xx            *$d1 [coda]
  370.     dc.l    skip_zmd_&xx            *$d2 ダミー
  371.     dc.l    ds_&xx                *$d3 [d.s.]
  372.     dc.l    tocoda_&xx            *$d4 [tocoda]
  373.     dc.l    gosub_&xx            *$d5 GOSUB
  374.     dc.l    ch_fader_&xx            *$d6 チャンネル・フェーダー \n
  375.     dc.l    master_fader_&xx        *$d7 マスター・フェーダー
  376.     dc.l    repeat_skip_&xx            *$d8 |n
  377.     dc.l    repeat_skip2_&xx        *$d9 |only
  378.     dc.l    pmod_deepen_&xx            *$da PMOD振幅増減
  379.     dc.l    arcc_deepen_&xx            *$db ARCC振幅増減
  380.     dc.l    vseq_deepen_&xx            *$dc VSEQ振幅増減
  381.     dc.l    agogik_deepen_&xx        *$dd アゴーギク振幅増減
  382.     dc.l    timbre_split_&xx        *$de 音色スプリット
  383.     dc.l    vseq_wf_&xx            *$df EXベロシティ波形タイプセレクト
  384.     dc.l    bend_@b_&xx            *$e0 オートベンド @B
  385.     dc.l    bend_@k_&xx            *$e1 オートベンド @K
  386.     dc.l    pmod8_&xx            *$e2 PMOD振幅 @M (1/8)
  387.     dc.l    pmod_speed8_&xx            *$e3 PMODスピード @S (8point)
  388.     dc.l    pmod_delay8_&xx            *$e4 PMODディレイ @H (8point)
  389.     dc.l    arcc8_&xx            *$e5 ARCC振幅 @A (1/8)
  390.     dc.l    arcc_speed8_&xx            *$e6 ARCCスピード @S (8point)
  391.     dc.l    arcc_delay8_&xx            *$e7 ARCCディレイ @H (8point)
  392.     dc.l    aftertouch_&xx            *$e8 アフタータッチ・シーケンス(1/8) @Z
  393.     dc.l    aftc_delay8_&xx            *$e9 アフタータッチ・シーケンス・ディレイ(optional 8point)
  394.     dc.l    vseq8_&xx            *$ea ベロシティ・シーケンス振幅 (8point)
  395.     dc.l    vseq_speed8_&xx            *$eb ベロシティ・シーケンス・スピード (8point)
  396.     dc.l    vseq_delay8_&xx            *$ec ベロシティ・シーケンス・ディレイ (8point)
  397.     dc.l    agogik8_&xx            *$ed アゴーギク振幅(1/8)
  398.     dc.l    agogik_speed8_&xx        *$ee アゴーギク・スピード(8point)
  399.     dc.l    agogik_delay8_&xx        *$ef アゴーギク・ディレイ(8point)
  400.     dc.l    effect_ctrl_&xx            *$f0 エフェクトコントロール @E
  401.     dc.l    poke_&xx            *$f1 ワーク直接書き換え直接 ?
  402.     dc.l    rltv_poke_&xx            *$f2 ワーク直接書き換え相対 ?
  403.     dc.l    exclusive_&xx            *$f3 Exclusive Send X
  404.     dc.l    midi_transmission_&xx        *$f4 MIDI生データ転送 @X
  405.     dc.l    loop_&xx            *$f5 LOOP終端
  406.     dc.l    auto_portament_&xx        *$f6 オートポルタメント
  407.     dc.l    asgn_arcc_&xx            *$f7 ARCCコントロール定義 @C
  408.     dc.l    event_&xx            *$f8 イベント制御
  409.     dc.l    return_&xx            *$f9 RETURN
  410.     dc.l    next_cmd_&xx            *$fa ダミー
  411.     dc.l    waiting_&xx            *$fb 同期待ち W
  412.     dc.l    fine_&xx            *$fc [fine]
  413.     dc.l    n                *$fd
  414.     dc.l    measure_&xx            *$fe 小節線
  415.     dc.l    play_end_&xx            *$ff 演奏終了
  416.     endm
  417.  
  418.     .list
  419.